home *** CD-ROM | disk | FTP | other *** search
- <?xml version="1.0"?>
- <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
- <?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
- <!-- $Revision: 1.6.2.6 $ -->
-
- <!--
- Copyright 2002-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
- <modulesynopsis metafile="mod_so.xml.meta">
-
- <name>mod_so</name>
- <description>Loading of executable code and
- modules into the server at start-up or restart time</description>
- <status>Extension</status>
- <sourcefile>mod_so.c</sourcefile>
- <identifier>so_module</identifier>
- <compatibility>This is a Base module (always included) on
- Windows</compatibility>
-
- <summary>
-
- <p>On selected operating systems this module can be used to
- load modules into Apache at runtime via the <a
- href="../dso.html">Dynamic Shared Object</a> (DSO) mechanism,
- rather than requiring a recompilation.</p>
-
- <p>On Unix, the loaded code typically comes from shared object
- files (usually with <code>.so</code> extension), on Windows
- this may either the <code>.so</code> or <code>.dll</code>
- extension.</p>
-
- <note type="warning"><title>Warning</title>
- <p>Apache 1.3 modules cannot be directly used
- with Apache 2.0 - the module must be modified to dynamically
- load or compile into Apache 2.0.</p>
- </note>
- </summary>
-
- <section id="windows"><title>Creating Loadable Modules for Windows</title>
-
- <note><title>Note</title>
- <p>The module name format changed for Windows
- with Apache 1.3.15 and 2.0 - the modules are now named as
- mod_foo.so</p>
-
- <p>While mod_so still loads modules with
- ApacheModuleFoo.dll names, the new naming convention is
- preferred; if you are converting your loadable module for 2.0,
- please fix the name to this 2.0 convention.</p></note>
-
- <p>The Apache module API is unchanged between the Unix and
- Windows versions. Many modules will run on Windows with no or
- little change from Unix, although others rely on aspects of the
- Unix architecture which are not present in Windows, and will
- not work.</p>
-
- <p>When a module does work, it can be added to the server in
- one of two ways. As with Unix, it can be compiled into the
- server. Because Apache for Windows does not have the
- <code>Configure</code> program of Apache for Unix, the module's
- source file must be added to the ApacheCore project file, and
- its symbols must be added to the
- <code>os\win32\modules.c</code> file.</p>
-
- <p>The second way is to compile the module as a DLL, a shared
- library that can be loaded into the server at runtime, using
- the <code><directive>LoadModule</directive></code>
- directive. These module DLLs can be distributed and run on any
- Apache for Windows installation, without recompilation of the
- server.</p>
-
- <p>To create a module DLL, a small change is necessary to the
- module's source file: The module record must be exported from
- the DLL (which will be created later; see below). To do this,
- add the <code>AP_MODULE_DECLARE_DATA</code> (defined in the
- Apache header files) to your module's module record definition.
- For example, if your module has:</p>
-
- <example>
- module foo_module;
- </example>
-
- <p>Replace the above with:</p>
- <example>
- module AP_MODULE_DECLARE_DATA foo_module;
- </example>
-
- <p>Note that this will only be activated on Windows, so the
- module can continue to be used, unchanged, with Unix if needed.
- Also, if you are familiar with <code>.DEF</code> files, you can
- export the module record with that method instead.</p>
-
- <p>Now, create a DLL containing your module. You will need to
- link this against the libhttpd.lib export library that is
- created when the libhttpd.dll shared library is compiled. You
- may also have to change the compiler settings to ensure that
- the Apache header files are correctly located. You can find
- this library in your server root's modules directory. It is
- best to grab an existing module .dsp file from the tree to
- assure the build environment is configured correctly, or
- alternately compare the compiler and link options to your
- .dsp.</p>
-
- <p>This should create a DLL version of your module. Now simply
- place it in the <code>modules</code> directory of your server
- root, and use the <directive>LoadModule</directive>
- directive to load it.</p>
-
- </section>
-
- <directivesynopsis>
- <name>LoadFile</name>
- <description>Link in the named object file or library</description>
- <syntax>LoadFile <em>filename</em> [<em>filename</em>] ...</syntax>
- <contextlist>
- <context>server config</context>
- </contextlist>
-
- <usage>
-
- <p>The LoadFile directive links in the named object files or
- libraries when the server is started or restarted; this is used
- to load additional code which may be required for some module
- to work. <em>Filename</em> is either an absolute path or
- relative to <a href="core.html#serverroot">ServerRoot</a>.</p>
-
- <p>For example:</p>
-
- <example>LoadFile libexec/libxmlparse.so</example>
-
- </usage>
- </directivesynopsis>
-
- <directivesynopsis>
- <name>LoadModule</name>
- <description>Links in the object file or library, and adds to the list
- of active modules</description>
- <syntax>LoadModule <em>module filename</em></syntax>
- <contextlist>
- <context>server config</context>
- </contextlist>
-
- <usage>
- <p>The LoadModule directive links in the object file or library
- <em>filename</em> and adds the module structure named
- <em>module</em> to the list of active modules. <em>Module</em>
- is the name of the external variable of type
- <code>module</code> in the file, and is listed as the <a
- href="module-dict.html#ModuleIdentifier">Module Identifier</a>
- in the module documentation. Example:</p>
-
- <example>
- LoadModule status_module modules/mod_status.so
- </example>
-
- <p>loads the named module from the modules subdirectory of the
- ServerRoot.</p>
- </usage>
-
- </directivesynopsis>
- </modulesynopsis>
-
-